package com.hspedu.poly_.detail_;

public class PolyDetail {
    public static void main(String[] args) {

        //本质：(向上转型)父类的引用指向子类的对象
        //格式：父类类型 引用名 = new 子类类型();
        Animal animal= new Cat();
        Object obj = new Cat();

        //向上转型的调用规则如下：
        //(1)可以调用父类中的所有成员(需遵守访问权限)，但是不能调用子类的特有成员
        //   animal.catchMouse;不能调用
        //(2)因为在编译阶段，能调用哪些成员，是由编译类型来决定的
        //(3)最终效果要看子类的具体实现(方法可能会重写)，
        //   即调用方法时，按照从运行类型(子类)开始查找方法然后调用，
        animal.eat();//先看Cat类中发找eat方法
        animal.run();
        animal.sleep();
        animal.show();

        //多态的向下转型
        //(1)语法：子类类型 引用名 = (子类类型) 父类引用;
        //cat 的编译类型 Cat , 运行类型是Cat
        Cat cat = (Cat) animal;
        cat.catchMouse();

        //(2)要求父类 的引用必须指向的是当前目标类型的对象

    }
}
